/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.brain.core.view.mbean;

import com.brain.core.common.UtilCore;
import com.brain.core.dto.OrganizacionDetaDto;
import com.brain.core.dto.OrganizacionDto;
import com.brain.core.dto.ParametroDto;
import com.brain.core.exception.DAOException;
import com.brain.core.manager.OrganizacionDetaManager;
import com.brain.core.manager.OrganizacionManager;
import com.brain.core.manager.RecursosManager;
import com.brain.core.view.util.ApplicationHelper;
import com.brain.core.view.util.ConstantesCore;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;

import javax.annotation.Resource;
import javax.faces.event.ActionEvent;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;


@Controller("organizacionMBean")
@Scope("session")
public class OrganizacionMBean extends GenericMBean implements Serializable {

    private static Logger logger = Logger.getLogger(OrganizacionMBean.class);
    
    
    @Resource
    private OrganizacionManager manager;
       
    @Resource
    private OrganizacionDetaManager mngOrganizacionDeta;
    
    @Resource
    private RecursosManager recursosManager;
    private List<OrganizacionDto> lista;
    private OrganizacionDto dto;
    private OrganizacionDto dtoFiltro;
    private String keyTitulo = "organizacion.panel";
    private int accionOrganizacion;
    private OrganizacionDetaDto organizacionDetaDto;
    private List<ParametroDto> listaEstadosOrganizacion;
    private List<ParametroDto> listaMonedas;
    private List<ParametroDto> listaTiposSubOrganizacion;
    private List<ParametroDto> listaEstadosSubOrganizacion;
    
    @Autowired
    private ApplicationMBean applicationMBean;
    
    @Autowired
    private SessionMBean sessionMBean;

    public OrganizacionMBean() {
        //sessionMBean.setAccion(ConstantesWeb.Formulario.LISTA);
        //sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));        
        this.dtoFiltro = new OrganizacionDto();
        
    }
    
    public String iniciar () {
        this.lista = null;     
        this.dto = null;
        this.dtoFiltro = new OrganizacionDto();            
        return ConstantesCore.UrlNavegacion.URL_LISTA_ORGANIZACIONES;
    }

    public String nuevo() {
        sessionMBean.setAccion(ConstantesCore.Formulario.NUEVO);
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));
        this.lista = new ArrayList<OrganizacionDto>();
        this.dto = new OrganizacionDto();
        return ConstantesCore.UrlNavegacion.URL_ORGANIZACION;
    }

    public String editar() {
        sessionMBean.setAccion(ConstantesCore.Formulario.EDITAR);
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));
        return ConstantesCore.UrlNavegacion.URL_ORGANIZACION;
    }

    public String ver() {
        sessionMBean.setAccion(ConstantesCore.Formulario.VER);
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));
        return ConstantesCore.UrlNavegacion.URL_ORGANIZACION;
    }

    public void buscar(ActionEvent ae) {
        try {
            this.lista = manager.obtenerOrganizaciones(dtoFiltro);
        } catch (DAOException ex) {
            logger.error(ex);
            showError(ex.getMessage());
        }
    }

    public String guardar() {
        String to = null;
        String mensajeTrx = "";

       {
            this.dto.setUsuario(sessionMBean.getSessionUsuarioDto().getId());
            this.dto.setFecha(UtilCore.Fecha.obtenerFechaActualDate());
            this.dto.setTerminal(sessionMBean.getSessionTerminal());                        
        }

        if (sessionMBean.getAccion() == ConstantesCore.Formulario.NUEVO) {
            try {
                UtilCore.General.toUpperCaseDto(this.dto);
                this.manager.nuevo(this.dto);
                mensajeTrx = UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok");
                showMessage(mensajeTrx);           
                
                to = retroceder();
            } catch (Exception ex) {
                showError(ex.getMessage());
                logger.error("ERROR DE SISTEMA", ex);
                to = null;
            }
        } else if (sessionMBean.getAccion() == ConstantesCore.Formulario.EDITAR) {
            try {
                UtilCore.General.toUpperCaseDto(this.dto);
                this.manager.editar(this.dto);
                mensajeTrx = UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok");
                showMessage(mensajeTrx);
                
                to = retroceder();
            } catch (Exception ex) {
                showError(ex.getStackTrace().toString());                
                to = null;
            }
        }
        return to;
    }

    public String retroceder() {
         this.dtoFiltro = new OrganizacionDto();            
         this.dtoFiltro.setId(this.dto.getId());
        buscar(null);
        sessionMBean.setAccion(ConstantesCore.Formulario.LISTA);
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));
        return ConstantesCore.UrlNavegacion.URL_LISTA_ORGANIZACIONES;
    }

    public String nuevoDetalle() {
        this.accionOrganizacion = ConstantesCore.Formulario.NUEVO;
        this.organizacionDetaDto = new OrganizacionDetaDto();
        return ConstantesCore.UrlNavegacion.URL_ORGANIZACION_DETA;
    }

    public String editarDetalle() {
        this.accionOrganizacion = ConstantesCore.Formulario.EDITAR;
        return ConstantesCore.UrlNavegacion.URL_ORGANIZACION_DETA;
    }

    public String verDetalle() {
        this.accionOrganizacion = ConstantesCore.Formulario.VER;
        return ConstantesCore.UrlNavegacion.URL_ORGANIZACION_DETA;
    }

    public String guardarDetalle () {
        String to = "";
        
        String mensajeTrx = null;
        this.organizacionDetaDto.setUsuario(sessionMBean.getSessionUsuarioDto().getId());
        this.organizacionDetaDto.setFecha(UtilCore.Fecha.obtenerFechaActualDate());
        this.organizacionDetaDto.setTerminal(sessionMBean.getSessionTerminal());     
        
        if (this.accionOrganizacion==ConstantesCore.Formulario.NUEVO) {
            this.organizacionDetaDto.setOrganizacionDto(this.dto);
            try {
                UtilCore.General.toUpperCaseDto(this.organizacionDetaDto);                
                mngOrganizacionDeta.nuevo(this.organizacionDetaDto);
                if(this.dto.getListaSubOrganizaciones()==null){
                 this.dto.setListaSubOrganizaciones(new ArrayList<OrganizacionDetaDto>());   
                }
                this.dto.getListaSubOrganizaciones().add(organizacionDetaDto);
                mensajeTrx = UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok");
                showMessage(mensajeTrx);                
                to = retrocederDetalle();
            } catch (Exception ex) {
                showError(ex.getMessage());
                logger.error("ERROR DE SISTEMA", ex);
                to = null;
            }
            
            
        }else if (this.accionOrganizacion==ConstantesCore.Formulario.EDITAR){
           try {
               UtilCore.General.toUpperCaseDto(this.organizacionDetaDto);
                this.mngOrganizacionDeta.editar(this.organizacionDetaDto);
                mensajeTrx = UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok");
                showMessage(mensajeTrx);
                to = retrocederDetalle();
            } catch (Exception ex) {
                showError(ex.getStackTrace().toString());           
                logger.error("ERROR DE SISTEMA", ex);
                to = null;
            }
        }
        return to;
    }
    
    public String retrocederDetalle () {
        return ConstantesCore.UrlNavegacion.URL_ORGANIZACION;
    }
    public int getAccionOrganizacion() {
        return accionOrganizacion;
    }

    public void setAccionOrganizacion(int accionOrganizacion) {
        this.accionOrganizacion = accionOrganizacion;
    }

    public OrganizacionDto getDto() {
        return dto;
    }

    public void setDto(OrganizacionDto dto) {
        this.dto = dto;
    }

    public OrganizacionDto getDtoFiltro() {
        return dtoFiltro;
    }

    public void setDtoFiltro(OrganizacionDto dtoFiltro) {
        this.dtoFiltro = dtoFiltro;
    }

    public String getKeyTitulo() {
        return keyTitulo;
    }

    public void setKeyTitulo(String keyTitulo) {
        this.keyTitulo = keyTitulo;
    }

    public List<OrganizacionDto> getLista() {
        return lista;
    }

    public void setLista(List<OrganizacionDto> lista) {
        this.lista = lista;
    }

    public OrganizacionManager getManager() {
        return manager;
    }

    public void setManager(OrganizacionManager manager) {
        this.manager = manager;
    }

    public RecursosManager getRecursosManager() {
        return recursosManager;
    }

    public void setRecursosManager(RecursosManager recursosManager) {
        this.recursosManager = recursosManager;
    }

    public OrganizacionDetaDto getOrganizacionDetaDto() {
        return organizacionDetaDto;
    }

    public void setOrganizacionDetaDto(OrganizacionDetaDto organizacionDetaDto) {
        this.organizacionDetaDto = organizacionDetaDto;
    }

    public List<ParametroDto> getListaEstadosOrganizacion() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogo(ConstantesCore.CatalogoParametro.ORGANIZACION_ESTADOS);
    }

    public void setListaEstadosOrganizacion(List<ParametroDto> listaEstadosOrganizacion) {
        this.listaEstadosOrganizacion = listaEstadosOrganizacion;
    }

    public List<ParametroDto> getListaMonedas() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogo(ConstantesCore.CatalogoParametro.MONEDAS_DEL_SISTEMA);
    }

    public void setListaMonedas(List<ParametroDto> listaMonedas) {
        this.listaMonedas = listaMonedas;
    }

    public List<ParametroDto> getListaTiposSubOrganizacion() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogo(ConstantesCore.CatalogoParametro.SUB_ORGANIZACION_TIPOS);
    }

    public void setListaTiposSubOrganizacion(List<ParametroDto> listaTiposSubOrganizacion) {
        this.listaTiposSubOrganizacion = listaTiposSubOrganizacion;
    }

    public List<ParametroDto> getListaEstadosSubOrganizacion() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogo(ConstantesCore.CatalogoParametro.SUB_ORGANIZACION_ESTADOS);
    }

    public void setListaEstadosSubOrganizacion(List<ParametroDto> listaEstadosSubOrganizacion) {
        this.listaEstadosSubOrganizacion = listaEstadosSubOrganizacion;
    }
}
